package com.cskaoyan.javase.string._2stringconst;

/**
 * 总结出一定会在堆上创建一个新的、独立的String对象的两种场景：
 *      1.new对象。如果使用new关键字创建String对象，会毫无疑问的在堆上创建一个新的String对象。
 *      2.任何String变量参与的字符串拼接运算。（注意必须有String变量参与拼接）
 *
 * 不会创建新的String对象,而是共用字符串常量池中存储的字符串对象(引用):
 *      1.任何直接用常量字面值字符串赋值的语句。
 *      2.任何直接用常量字面值字符串做拼接运算的语句。
 *      3.只有(自定义)常量参与的字符串赋值语句。
 *
 * @since 10:43
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = "Hello";
        String s3 = "Hel" + "lo";
        String s4 = "Hel" + new String("lo");
        String s5 = new String("Hello");
        String s7 = "H";
        String s8 = "ello";
        String s9 = s7 + s8;
        final String s10 = new String("H");
        final String s11 = new String("ello");
        final String s12 = "H";
        final String s13 = "ello";
        String s14 = s10 + s11;
        String s15 = s12 + s13;

        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
        System.out.println(s1 == s4);
        System.out.println(s4 == s5);
        System.out.println(s3 == ("He" + "llo"));
        System.out.println(s1 == s9);
        System.out.println(s1 == s14);
        System.out.println(s1 == s15);
    }
}
